export const elementObj = {
	表面张力计算: {
		可选元素: ['Mg', 'Al', 'Zn', 'La', 'Ce', 'Gd', 'Y', 'Nd'],
		关联元素: [
			// 二元组合
			'Mg-Al',
			'Mg-La',
			'Mg-Ce',
			'Mg-Gd',
			'Mg-Y',
			'Mg-Nd',
			'Al-La',
			'Al-Ce',
			'Al-Gd',
			'Al-Y',
			'Al-Nd',
			'Mg-Zn',
			'Al-Zn',
			'Zn-La',
			'Zn-Ce',
			'Zn-Gd',
			'Zn-Y',
			'Zn-Nd',
			// 三元组合
			'Mg-Al-Zn',
			'Mg-Al-La',
			'Mg-Al-Ce',
			'Mg-Al-Gd',
			'Mg-Al-Y',
			'Mg-Al-Nd',
			'Mg-Zn-La',
			'Mg-Zn-Ce',
			'Mg-Zn-Gd',
			'Mg-Zn-Y',
			'Mg-Zn-Nd',
			'Al-Zn-La',
			'Al-Zn-Ce',
			'Al-Zn-Gd',
			'Al-Zn-Y',
			'Al-Zn-Nd',
		],
		formData: {
			composition: [], // 元素成分
			system: '', // 元素组分
			system_type: 'ternary', // 算法类型
			temperature: '', // 温度
			api: 'calculateSurfaceTension',
		},
	},
	粘度计算: {
		可选元素: ['Mg', 'Al', 'Si', 'Cu', 'Fe'],
		关联元素: [
			// 二元组合
			'Mg-Al',
			'Al-Si',
			'Al-Cu',
			'Al-Fe',
			'Mg-Si',
			'Mg-Cu',
			'Mg-Fe',
			'Si-Cu',
			'Si-Fe',
			'Fe-Cu',
			// 三元组合
			'Mg-Al-Si',
			'Mg-Al-Cu',
			'Mg-Al-Fe',
			'Al-Si-Cu',
			'Al-Si-Fe',
		],
		formData: {
			composition: [], // 元素成分
			system: '', // 元素组分
			system_type: 'ternary', // 算法类型
			temperature: '', // 温度
			api: 'calculateViscosity',
		},
	},
	'热导率/电导率计算': {
		可选元素: [
			'Mg',
			'Li',
			'Al',
			'Si',
			'Ca',
			'Sc',
			'Mn',
			'Fe',
			'Ni',
			'Cu',
			'Zn',
			'Ga',
			'Sr',
			'Y',
			'Zr',
			'Ag',
			'Sn',
			'Sb',
			'La',
			'Ce',
			'Nd',
			'Sm',
			'Gd',
			'Er',
		],
		formData: {
			composition: [], // 元素成分
			calculation_type: 'both',
			temperature: '', // 温度
			api: 'calculateConductivity',
		},
	},
	点计算: {
		可选元素: [
			'Al',
			'Ag',
			'C',
			'Cu',
			'Nd',
			'Mg',
			'Si',
			'Zn',
			'Co',
			'Gd',
			'W',
			'Y',
			'Bi',
			'Sn',
			'Sr',
		],
		关联元素: [
			// 二元组合
			'Ag-Al',
			'Al-C',
			'Al-Cu',
			'Mg-Nd',
			'Mg-Si',
			'Mg-Zn',
			// 三元组合
			'Al-C-Mg',
			'Al-Co-Gd',
			'Al-Co-W',
			'Al-Cu-Si',
			'Al-Cu-Y',
			'Al-Cu-Zn',
			'Bi-Mg-Sn',
			'Mg-Sn-Sr',
		],
		formData: {
			// 二元点图
			two: {
				tdb: 'Ag-Al.tdb', // 对应数据库
				elements: 'AL,AG', // 元素成分
				temperature: 600, // 温度
				pressure: 101325, // 压强
				comp1: 'AL', // 第一元素
				comp1_value: 0.4, // 第一元素成分
				api: 'equilibriumEndpoint',
			},
			// 三元点图
			three: {
				tdb: 'Al-C-Mg.tdb', // 对应数据库
				elements: 'AL,MG,C', // 元素成分
				temperature: 600, // 温度
				pressure: 101325, // 压强
				comp1: 'AL', // 第一元素
				comp1_value: 0.4, // 第一元素成分
				comp2: 'MG', // 第二元素
				comp2_value: 0.3, // 第二元素成分
				api: 'equilibriumEndpoint',
			},
		},
	},
	线计算: {
		可选元素: ['Al', 'Ag', 'C', 'Cu', 'Nd', 'Mg', 'Si', 'Zn'],
		关联元素: [
			// 二元组合
			'Ag-Al',
			'Al-C',
			'Al-Cu',
			'Mg-Nd',
			'Mg-Si',
			'Mg-Zn',
		],
		formData: {
			// 固定成分根据温度范围计算
			Temp: {
				elements: 'AL,AG', // 元素成分
				tdb: 'Ag-Al.tdb', // TDB文件
				pressure: 101325, // 压强
				tmin: 300, // 最小温度
				tmax: 800, // 最大温度
				tstep: 100, // 步长
				comp1: 'AL', // 第一元素
				comp1_value: 0.02, // 第一元素成分
				api: 'lineTempRange',
			},
			// 固定温度根据成分范围计算
			Comp: {
				elements: 'AL,AG', // 元素成分
				tdb: 'Ag-Al.tdb', // TDB文件
				pressure: 101325, // 压强
				temp: 600, // 温度
				comp1: 'AL', // 第一元素
				comp1_xmin: 0, // 第一元素最小成分
				comp1_xmax: 0.99, // 第一元素最大成分
				comp1_xcount: 100, // 第一元素成分步长
				api: 'lineCompRange',
			},
		},
	},
	相图计算: {
		可选元素: [
			'Ag',
			'Al',
			'C',
			'Cu',
			'Mg',
			'Nd',
			'Si',
			'Zn', // 二元组合元素
			'Co',
			'Gd',
			'W',
			'Y',
			'Bi',
			'Sn',
			'Sr', // 三元组合新增元素
			'Cr',
			'Ni',
			'Ti',
			'V',
			'La',
			'O', // 四元组合新增元素
		],
		关联元素: [
			// 二元组合
			'Ag-Al',
			'Al-C',
			'Al-Cu',
			'Mg-Nd',
			'Mg-Si',
			'Mg-Zn',
			// 三元组合
			'Al-C-Mg',
			'Al-Co-Gd',
			'Al-Co-W',
			'Al-Cu-Si',
			'Al-Cu-Y',
			'Al-Cu-Zn',
			'Bi-Mg-Sn',
			'Mg-Sn-Sr',
			// 四元组合
			'Al-Co-Cr-Ni',
			'Al-Co-Ni-W',
			'Al-Cr-Ti-V',
			'Al-Cu-Mg-Si',
			'Al-La-O-Y',
		],
		formData: {
			// 二元相图
			tow: {
				elements: 'AL,AG', // 元素成分
				tdb: 'Ag-Al.tdb', // 对应数据库
				pressure: 101325, // 压强
				tmin: 300, // 最小温度
				tmax: 1000, // 最大温度
				tstep: 10, // 步长
				xmin: 0, // 最小成分
				xmax: 1, // 最大成分
				xstep: 0.02, // 成分步长
				api: 'binplotPhase',
			},
			// 三元相图
			three: {
				elements: 'AL,C,MG', // 元素成分
				tdb: 'Al-C-Mg.tdb', // 对应数据库
				pressure: 101325, // 压强
				temp: 800, // 温度
				first: 'AL', // 第一元素
				second: 'C', // 第二元素
				fxmin: 0, // 第一元素最小成分
				fxmax: 1, // 第一元素最大成分
				fxstep: 0.02, // 第一元素成分步长
				sxmin: 0, // 第二元素最小成分
				sxmax: 1, // 第二元素最大成分
				sxstep: 0.02, // 第二元素成分步长
				api: 'ternplotPhase',
			},
		},
	},
	二元相图: {
		可选元素: ['Ag', 'Al', 'C', 'Cu', 'Mg', 'Nd', 'Si', 'Zn'],
		关联元素: ['Ag-Al', 'Al-C', 'Al-Cu', 'Mg-Nd', 'Mg-Si', 'Mg-Zn'],
	},
	三元等温截面: {
		可选元素: [
			'Al',
			'C',
			'Mg',
			'Co',
			'Gd',
			'W',
			'Cu',
			'Si',
			'Y',
			'Zn',
			'Bi',
			'Sn',
			'Sr',
		],
		关联元素: [
			'Al-C-Mg',
			'Al-Co-Gd',
			'Al-Co-W',
			'Al-Cu-Si',
			'Al-Cu-Y',
			'Al-Cu-Zn',
			'Bi-Mg-Sn',
			'Mg-Sn-Sr',
		],
	},
	高元等温截面: {
		可选元素: [
			'Al',
			'Co',
			'Cr',
			'Ni',
			'W',
			'Ti',
			'V',
			'Cu',
			'Mg',
			'Si',
			'La',
			'O',
			'Y',
		],
		关联元素: [
			'Al-Co-Cr-Ni',
			'Al-Co-Ni-W',
			'Al-Cr-Ti-V',
			'Al-Cu-Mg-Si',
			'Al-La-O-Y',
		],
	},
}

// 核心算法（纯函数，不依赖Vue）
export const getAvailableElements = (config, selectedElements) => {
	const { 关联元素: combinations, 可选元素: allElements } = config || {}
	const selectedCount = selectedElements.length

	// 初始状态返回所有可选元素
	if (selectedCount === 0) return allElements || []

	// 根据已选元素筛选可能的组合
	const availableCombinations =
		combinations?.filter((combo) => {
			const elements = combo.split('-')
			return selectedElements.every((el) => elements.includes(el))
		}) || []

	// 提取新元素（排除已选的）
	const newElements = new Set()
	availableCombinations.forEach((combo) => {
		combo.split('-').forEach((el) => {
			if (!selectedElements.includes(el)) newElements.add(el)
		})
	})

	// 返回结果：已选元素（用于取消选择） + 新可选元素
	return [...selectedElements, ...Array.from(newElements)]
}

/**
 * 匹配当前已选元素的组合是否存在于关联元素中（顺序无关）
 * @param {Object} config 配置对象，需包含关联元素数组
 * @param {Array} selectedElements 当前已选元素数组（如 ['Mg', 'Al']）
 * @returns {String} 匹配到的关联元素字符串，若无则返回 ''
 */
export const findMatchedCombination = (config, selectedElements) => {
	const { 关联元素: relatedCombinations } = config || {}
	if (!selectedElements?.length || !relatedCombinations?.length) return ''

	// 对已选元素排序并拼接为标准格式（如 'Al-Mg'）
	const normalizedSelected = [...selectedElements].sort().join('-')

	// 遍历关联元素，检查是否存在完全匹配的组合
	for (const combo of relatedCombinations) {
		const elementsInCombo = combo.split('-').sort()
		if (
			elementsInCombo.length === selectedElements.length &&
			elementsInCombo.join('-') === normalizedSelected
		) {
			return combo // 返回原始关联元素（保持原始顺序）
		}
	}

	return '' // 无匹配
}
